package Day_0218.DataType;

/**
 * @author zxc
 * @date 2023/02/18 14:14
 **/
public class Static {
    public static void main(String[] args) {
        /**
         * 谈一谈对于Static关键字的理解
         * ===》
         * 1.static的主要意义是，在于创建独立于具体对象的域变量或者方法。
         * 以致于即使没有创建对象，也能使用属性和调用方法！
         *
         * 2.static关键字，还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。
         * static块可以置于类中的任何地方，类中可以有多个static块。
         * 在类初次被加载的时候，会按照static块的顺序来执行每个static块，并且只会执行一次。
         *
         * 3.为什么说static块可以用来优化程序性能，是因为它的特性:
         * ===》
         * 静态代码块（用static关键字进行修饰的那部分代码）只会在类加载的时候，执行一次。
         * 因此，很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
         *
         * 4.static的独特之处
         * （1）被static修饰的变量或者方法，是独立于该类的任何对象，
         *  也就是说，这些变量和方法不属于任何一个实例对象，而是被类的实例对象所共享。
         *  ===》即，可以不创建该类的实例对象，直接根据静态类名，去调用static关键字所修饰的变量和方法;
         *
         * （2）在该类被第一次加载的时候，就会去加载被static修饰的部分，而且只在类第一次使用时加载并进行初始化，
         *  注意这是第一次用就要初始化，后面根据需要是可以再次赋值的。
         *
         * （3）static变量值，在类加载的时候分配空间，以后创建类对象的时候不会重新分配。
         *  赋值的话，是可以任意赋值的！
         *  ===》即，使用Static关键字所修饰的变量是在类加载时，就给属于该类的静态变量去分配内存空间;
         *
         * （4）被static修饰的变量或者方法，是优先于对象存在的，
         *  也就是说当一个类加载完毕之后，即便没有创建对象，也可以去访问。
         *
         * 5.static应用场景
         * （1）被static关键字所修饰的变量/方法，是被类的实例对象所共享，
         *  因此如果某个成员变量是被所有对象所共享的，那么这个成员变量就应该定义为静态变量。
         * （2）因此比较常见的static应用场景有：
         *  1、修饰成员变量
         *  2、修饰成员方法
         *  3、静态代码块
         *  4、修饰类【只能修饰内部类也就是静态内部类】
         *  5、静态导包
         *
         * 6.static注意事项
         * （1）静态只能访问静态。
         * （2）非静态既可以访问非静态的，也可以访问静态的。
         *
         */
    }
}
